package com.lrj.myswagger.controller;

import com.lrj.myswagger.domain.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

//@Api的tags属性是设置控制器的标题
@Api(tags = "用户管理相关接口")
@RestController
@RequestMapping("/user")
public class UserController {

    //@ApiOperation设置接口的标题
    @ApiOperation("根据id获取用户")
    @GetMapping("/{id}")
    public User getById(@PathVariable("id") Long id) {
        return User.builder()
                .id(id)
                .name("张三")
                .address("龙湖区")
                .build();
    }

    @ApiOperation("添加用户的接口")
    @PostMapping()
    /**
     *  ApiImplicitParam注解用来描述一个参数，可以配置参数的中文含义，
     * 也可以给参数设置默认值，这样在接口测试的时候可以避免手动输入。
     *
     * 需要注意的是，@ApiImplicitParam注解中虽然可以指定参数是必填的，
     * 但是却不能代替@RequestParam(required = true)，前者的必填只是在
     * Swagger2框架内必填，抛弃了Swagger2，这个限制就没用了，所以假如
     * 开发者需要指定一个参数必填，@RequestParam(required = true)注解
     * 还是不能省略。
     */
    @ApiImplicitParams({
            @ApiImplicitParam(name = "username", value = "用户名", defaultValue = "李四"),
            @ApiImplicitParam(name = "address", value = "用户地址", defaultValue = "深圳", required = true)
    })
    public User addUser(String username, @RequestParam(required = true) String address) {

        return User.builder()
                .id(1L)
                .name(username)
                .address(address)
                .build();
    }
}
